package com.CRApp.service;

import com.CRApp.pojo.Cart;
import com.CRApp.pojo.CartItemDTO;
import java.util.List;

/**
 * 购物车服务接口
 * 提供购物车相关的业务逻辑方法
 */
public interface CartService {
    /**
     * 添加商品到购物车
     * 如果商品已存在，则更新数量（累加）
     * @param cart 购物车项信息，包含用户ID、商品ID和数量
     * @return 添加是否成功
     */
    boolean addToCart(Cart cart);
    
    /**
     * 获取用户的购物车列表
     * 查询指定用户的所有购物车项
     * @param userId 用户ID
     * @return 购物车项列表
     */
    List<Cart> getUserCart(Integer userId);
    
    /**
     * 获取用户的购物车列表（带商品详情）
     * 查询指定用户的所有购物车项，并包含商品详情
     * @param userId 用户ID
     * @return 购物车项列表（带商品详情）
     */
    List<CartItemDTO> getUserCartWithProductDetails(Integer userId);
    
    /**
     * 获取购物车项详情（带商品详情）
     * 查询指定购物车项的详情，并包含商品详情
     * @param cartId 购物车项ID
     * @return 购物车项（带商品详情）
     */
    CartItemDTO getCartItemWithProductDetails(Integer cartId);
    
    /**
     * 更新购物车商品数量
     * 修改指定购物车项的商品数量（覆盖原数量）
     * @param cartId 购物车项ID
     * @param quantity 新的商品数量
     * @return 更新是否成功
     */
    boolean updateQuantity(Integer cartId, Integer quantity);
    
    /**
     * 删除购物车项
     * 根据购物车项ID删除单个购物车项
     * @param cartId 购物车项ID
     * @return 删除是否成功
     */
    boolean deleteCartItem(Integer cartId);
    
    /**
     * 删除购物车中的特定商品
     * 根据用户ID和商品ID删除购物车中的特定商品
     * @param userId 用户ID
     * @param productId 商品ID
     * @return 删除是否成功
     */
    boolean deleteCartProduct(Integer userId, Integer productId);
    
    /**
     * 清空用户购物车
     * 删除指定用户的所有购物车项，但保留购物车本身
     * @param userId 用户ID
     * @return 清空是否成功
     */
    boolean clearUserCart(Integer userId);
    
    /**
     * 获取购物车项详情
     * 查询指定购物车项ID的详细信息
     * @param cartId 购物车项ID
     * @return 购物车项信息
     */
    Cart getCartItem(Integer cartId);
} 